package MRDemo;

//import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;
import java.math.BigDecimal;

public class mapDemo extends Mapper<LongWritable, Text, Text, bean>{
    //重写map操作，将数据读取到，然后处理传递到reduce
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, bean>.Context context) throws IOException, InterruptedException {
    /*
        1.获得每一行的数据，将text类型的数据转化为String类型
        2.通过将转换好的数据进行切割生成一组String类型数组
        3.获得需要的每一个数据(device_id price_self price_other)
        4.在传递数据到下一个阶段前，做数据类型的转换
        5.将获得到的数据作为key进行传递;将处理好的数据作为value进行传递,value类型为bean类型
        6.将准备好的数据往下一个阶段传递
     */

        //对数据进行切割
        String str = value.toString();
        String[] strarr = str.split(" ");

        //获得需要的数据
        String device_id = strarr[strarr.length - 1];
        String price_self_string = strarr[strarr.length - 3];
        String price_other_string = strarr[strarr.length - 2];

        //转换数据类型
        BigDecimal price_self = new BigDecimal(price_self_string);
        BigDecimal price_other = new BigDecimal(price_other_string);

        //传递key类型
        Text DeviceID = new Text();
        DeviceID.set(device_id);

        //创建value的类型
        bean bean = new bean(device_id, price_self, price_other);

        //将准备好的数据往下一个阶段传递
        context.write(DeviceID, bean);
    }
}
